package com.xuzy.x808.server.processor;

import com.xuzy.x808.common.enums.MsgTypeEnum;
import com.xuzy.x808.common.utils.SendUtils;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public abstract class AbstractProcessor implements ProcessService {
    private final Logger logger = LoggerFactory.getLogger(getClass());
    /**
     * 部分终端消息需要专门应答，除此之外的其他终端消息平台按照协议要求进行平台通用应答或者不应答
     * 起始字节 字段 数据类型 描述及要求
     * 0 应答流水号 WORD 对应的平台消息的流水号 seq
     * 2 应答 ID WORD 对应的平台消息的 ID messageId
     * 4 结果 BYTE 0：成功/确认；1：失败；2：消息有误；3：不支持
     *
     * @param devId
     * @param messageId
     * @param seq
     * @return
     */
    @Override
    public void response(ChannelHandlerContext ctx, String devId, Integer messageId, Integer seq) {
        ByteBuf msgBody = Unpooled.buffer(5);
        msgBody.writeShort(seq);
        msgBody.writeShort(messageId);
        msgBody.writeByte(0);
        ByteBuf response = SendUtils.packetNormalResponse(devId, MsgTypeEnum.NORMAL_RESP.getMsgId(), msgBody);

        logger.info("数据写出:" + ByteBufUtil.hexDump(response));
        ctx.writeAndFlush(response);
    }
}
